import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import router from './router'
import store from './store'
import { createPinia } from 'pinia'
import axios from 'axios'
import config from './config'

// 配置axios全局默认值 - 使用动态获取的baseURL
// 为了确保baseURL始终是最新的，这里使用axios拦截器
axios.interceptors.request.use(request => {
  // 每次请求前动态设置baseURL
  request.baseURL = config.apiBaseUrl;
  
  // 从当前URL的查询参数中获取token（如果有）
  const urlParams = new URLSearchParams(window.location.search);
  const urlToken = urlParams.get('token');
  
  // 如果URL中有token，优先使用它
  if (urlToken && !request.headers['Authorization']) {
    request.headers['Authorization'] = `Bearer ${urlToken}`;
  } else if (store.state.token && !request.headers['Authorization']) {
    // 否则使用store中的token
    request.headers['Authorization'] = `Bearer ${store.state.token}`;
  }
  
  return request;
});

// 添加响应拦截器来统一处理错误
axios.interceptors.response.use(
  response => response,
  error => {
    // 401错误 - 未授权，token过期
    if (error.response?.status === 401) {
      // 清除token并跳转到登录页
      store.commit('CLEAR_AUTH');
      
      // 如果当前页面需要认证，跳转到登录页
      const currentRoute = router.currentRoute.value;
      if (currentRoute.meta?.requiresAuth) {
        router.push({
          name: 'Login', 
          query: { redirect: currentRoute.fullPath }
        });
      }
    }
    // 403错误 - 权限不足，但不需要跳转，让组件自己处理
    else if (error.response?.status === 403) {
      // 不做任何路由跳转，让组件自己处理403错误
      console.warn('403权限错误，但不进行路由跳转');
    }
    
    // 继续抛出错误，让各个service层的handleApiError处理
    return Promise.reject(error);
  }
);

const app = createApp(App)
const pinia = createPinia()

app.use(ElementPlus)
app.use(router)
app.use(store)
app.use(pinia)

// 全局配置
app.config.globalProperties.$config = config

app.mount('#app')
